package com.hb.trade.server.center.au.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hb.core.pojo.center.au.dto.RoleDTO;
import com.hb.core.pojo.center.au.entity.Role;
import com.hb.core.pojo.center.au.entity.User;
import com.hb.core.pojo.enums.RoleSignEnum;
import com.hb.core.pojo.enums.RoleTypeEnum;

import java.util.List;

/**
 * 角色信息表 服务类
 *
 * @author zhaojk
 * @since 2021-11-29
 */
public interface RoleService extends IService<Role> {
    /**
     * 获取指定的业务角色(总公司管理员)
     *
     * @param roleSign
     * @return
     * @see RoleSignEnum
     */
    Role getRoleByRoleSign(RoleSignEnum roleSign);

    /**
     * 获取指定角色类型的系统角色信息
     * 当roleType=7时(即总公司管理员时), 必须指定roleSign
     * roleType为其他值时, roleSign不需要传
     *
     * @param roleType
     * @return
     * @see RoleTypeEnum
     */
    Role getRoleByRoleType(RoleTypeEnum roleType, RoleSignEnum roleSignEnum);

    /**
     * 获取指定角色类型的非业务角色的系统角色信息
     *
     * @param roleType
     * @return
     * @see RoleTypeEnum
     */
    Role getRoleByRoleType(RoleTypeEnum roleType);

    /**
     * 分页查询角色列表
     *
     * @param rolePage
     * @param roleDTO
     * @return
     */
    Page<Role> pageRoles(Page<RoleDTO> rolePage, RoleDTO roleDTO);

    /**
     * 公司信息添加角色信息
     *
     * @param orgId        需要添加的企业ID
     * @param accountLevel 账号等级(1为一级帐号, 2为二级账号, 以此类推...)
     * @param roleSign     业务角色类型
     * @return
     * @see RoleSignEnum
     */
    boolean initData(Long orgId, Integer canCreateBranchCompany, int accountLevel, int roleSign);

    /**
     * 分页查询角色列表, 后台管理用
     *
     * @param rolePage
     * @param roleDTO
     * @return
     */
    Page<Role> pageManagementRoles(Page<RoleDTO> rolePage, RoleDTO roleDTO);

    /**
     * 公司信息添加角色信息
     *
     * @param user                                   用户对象
     * @param user#orgId                             企业ID
     * @param user#accountLevel                      账号等级
     * @param user#userConfig#canCreateBranchCompany 用户的总分公司权限
     * @param roleSign                               业务角色类型
     * @return
     * @see RoleSignEnum
     */
    boolean initData(User user, int roleSign);

    /**
     * 判断指定的角色类型是否存在
     *
     * @param orgId
     * @param roleSign
     * @param roleTypeEnum
     * @return true: 存在, false: 不存在
     */
    boolean exists(Long orgId, int roleSign, RoleTypeEnum roleTypeEnum);

    /**
     * 根据手机号查询全部非投标人角色ID
     *
     * @param phone
     * @return
     */
    List<Long> listRoleIdByPhone(String phone, Integer roleSign);
}
